

#ifndef UCPLDSDDATA_H
#define UCPLDSDDATA_H

#pragma once

#include "zacpl.h"
#include "zacplobject.h"
#include "zacpldsdentry.h"
#include "zacarray.h"

typedef UcArray<UcPlDSDEntry, UcArrayObjectCopyReallocator <UcPlDSDEntry> > UcPlDSDEntries;

struct UcPl3dDwfOptions {
    bool  bGroupByXrefHierarchy;
    bool  bPublishWithMaterials;
};

class UcPlDSDData  : public UcPlObject
{
    UCPL_DECLARE_MEMBERS(UcPlDSDData)

public:

    UCPL_PORT UcPlDSDData();

    UCPL_PORT virtual ~UcPlDSDData();

    UCPL_PORT UcPlDSDData(const UcPlDSDData & src);

    UCPL_PORT UcPlDSDData& operator= (const UcPlDSDData &src);

    UCPL_PORT const ZTCHAR *      projectPath() const;
    UCPL_PORT void              setProjectPath(const ZTCHAR * pVal);

    UCPL_PORT const ZTCHAR *      destinationName() const;
    UCPL_PORT void              setDestinationName(const ZTCHAR * pVal);

    UCPL_PORT void              getDSDEntries(UcPlDSDEntries &val) const;
    UCPL_PORT void              setDSDEntries(const UcPlDSDEntries &val);

    UCPL_PORT int               numberOfDSDEntries() const;
    UCPL_PORT UcPlDSDEntry&     DSDEntryAt(int idx);

    UCPL_PORT UcPlDSDEntry::SheetType sheetType() const;
    UCPL_PORT void                    setSheetType(UcPlDSDEntry::SheetType val);

    UCPL_PORT const ZTCHAR *      password() const;
    UCPL_PORT void              setPassword(const ZTCHAR * pVal);

    UCPL_PORT void              getUnrecognizedData(
                                    UcArray<ZTCHAR*> &sectionArray,
                                    UcArray<ZTCHAR*> &dataArray) const;
    UCPL_PORT void              setUnrecognizedData(
                                    const UcArray<ZTCHAR*> &sectionArray,
                                    const UcArray<ZTCHAR*> &dataArray);
    UCPL_PORT void              setUnrecognizedData(
                                    const ZTCHAR * pSectionName,
                                    const ZTCHAR * pSectionData);
    
    UCPL_PORT unsigned int      majorVersion() const;
    UCPL_PORT void              setMajorVersion(unsigned int majorVersion);

    UCPL_PORT unsigned int      minorVersion() const;
    UCPL_PORT void              setMinorVersion(unsigned int minorVersion);

    UCPL_PORT const ZTCHAR *      sheetSetName() const;
    UCPL_PORT void              setSheetSetName(const ZTCHAR * pSheetSetName);

    UCPL_PORT unsigned int      noOfCopies() const;
    UCPL_PORT void              setNoOfCopies(unsigned int copies);

    UCPL_PORT void              setIsSheetSet(bool bSheetSet);
    UCPL_PORT bool              isSheetSet() const;

    UCPL_PORT bool              isHomogeneous() const;
    UCPL_PORT void              setIsHomogeneous(bool bHomogeneous);
    
    UCPL_PORT bool              plotStampOn() const;
    UCPL_PORT void              setPlotStampOn(bool bOn);

    UCPL_PORT const ZTCHAR *      selectionSetName() const;
    UCPL_PORT void              setSelectionSetName(const ZTCHAR * pSelSetName);

    UCPL_PORT const ZTCHAR *      categoryName() const;
    UCPL_PORT void              setCategoryName(const ZTCHAR * pCategoryName);

    UCPL_PORT const ZTCHAR *      logFilePath() const;
    UCPL_PORT void              setLogFilePath(const ZTCHAR * pLogFilePath);

    UCPL_PORT const UcPl3dDwfOptions&   get3dDwfOptions() const;
    UCPL_PORT void              set3dDwfOptions(const UcPl3dDwfOptions &val);

    UCPL_PORT bool              readDSD(const ZTCHAR *pName);
    UCPL_PORT bool              writeDSD(const ZTCHAR *pName);

    UCPL_PORT bool              includeLayerInfo() const;
    UCPL_PORT void              setIncludeLayerInfo(bool bOn);
    
    UCPL_PORT bool              promptForDwfName() const;
    UCPL_PORT void              setPromptForDwfName(bool bPromptForDwfName);

    UCPL_PORT bool              pwdProtectPublishedDWF() const;
    UCPL_PORT void              setPwdProtectPublishedDWF(
                                bool bPwdProtectPublishedDWF);

    UCPL_PORT bool              promptForPassword() const;
    UCPL_PORT void              setPromptForPassword(bool bPromptForPassword);
};

#endif 
